Skip to main content

Docusaurus 網站開發技術指南

本文檔整理了關於 Docusaurus 網站開發的實用技術知識,包括樣式設定、響應式設計、SEO優化等方面的最佳實踐。

目錄

  1. CSS 樣式設定
  2. Hero 區塊設計
  3. Google 字體引入
  4. 頁腳設計與社交媒體圖標
  5. SEO 優化策略
  6. Open Graph 與社交媒體分享

CSS 樣式設定

Docusaurus CSS 類別來源

Docusaurus 中的 CSS 樣式主要來自兩個地方:

  1. Docusaurus 官方內建 CSS class

    • 例如 herohero--primary 是來自 Docusaurus 預設的主題樣式
    • 通常定義在 node_modules/@docusaurus/theme-classic/lib/theme 或最終 build 完會打包進 .docusaurus
    • 控制整個頁首(Hero Section)的樣式,例如背景色、文字色等
    • 想自訂這些,通常是覆寫 custom.css 或 theme 的 override
  2. 專案自己的 CSS Module

    • 例如 styles.heroBanner 中的 styles 是 import 進來的 CSS Module
    • heroBanner 是這個 CSS Module 中定義的一個 class
    • 通常在 src/pages/index.module.css 中定義
    • src/pages/index.jssrc/pages/index.jsx 中引入:import styles from './index.module.css';

自定義 Hero 區塊背景色

要修改 Hero 區塊的背景色或圖片,需要覆寫官方的 hero--primary 這個 class。正確做法有兩種:

  1. 使用內嵌 style 控制(推薦新手使用):

    <header
    className={clsx('hero hero--primary', styles.heroBanner)}
    style={{
    backgroundImage: 'url(/img/banner.png)',
    backgroundSize: 'cover',
    backgroundPosition: 'center',
    }}
    >
  2. 使用 Docusaurus 官方建議的 CSS 變數

    .hero--primary {
    --ifm-hero-background-image: url('/img/banner.png');
    background-image: var(--ifm-hero-background-image);
    background-size: cover;
    background-position: center;
    }

適配白天/黑夜模式

在 Docusaurus 中,[data-theme='light'][data-theme='dark'] 是掛在 <html> 標籤上的,用於控制白天/黑夜模式的樣式。正確的寫法是:

[data-theme='light'] .hero--primary {
background-color: #ffffff;
color: #000000; /* 黑色字 */
background-size: cover;
background-position: center;
}

[data-theme='dark'] .hero--primary {
background-color: #282a36;
color: #ffffff; /* 白色字 */
background-size: cover;
background-position: center;
}

Hero 區塊設計

響應式 Hero 設計

創建一個左右布局的 Hero 區塊,並支持響應式設計:

HTML 結構

<header className={clsx('hero hero--primary', styles.heroBanner)}>
<div className="heroWrapper">
<div className="heroLeft">
<h1 className="heroTitle">COVIA</h1>
</div>
<div className="heroRight">
<p className="heroSubtitle">開啟智慧之路,從每一次探索開始。</p>
</div>
</div>
</header>

CSS 樣式

.heroBanner {
padding: 6rem 2rem;
}

.heroWrapper {
display: flex;
align-items: center;
justify-content: space-between;
max-width: 1200px;
margin: 0 auto;
}

.heroLeft {
flex: 1;
text-align: left;
}

.heroRight {
flex: 1;
text-align: left;
}

.heroTitle {
font-family: 'Anton', sans-serif;
font-size: 8rem;
font-weight: 400;
line-height: 1.1;
margin: 0;
}

.heroSubtitle {
font-family: 'Noto Sans TC', sans-serif;
font-size: 1.5rem;
font-weight: 400;
margin: 0;
max-width: 400px;
}

/* 響應式設計 */
@media (max-width: 768px) {
.heroWrapper {
flex-direction: column;
text-align: center;
}

.heroLeft,
.heroRight {
flex: none;
}

.heroTitle {
font-size: 4rem;
}

.heroSubtitle {
margin-top: 2rem;
font-size: 1.25rem;
}
}

解決文本排版問題

當中文文本在小容器中出現奇怪的換行和縮排問題時,可以使用以下 CSS 屬性:

.heroSubtitle {
text-align: left;
word-break: break-word; /* 中文也能斷行 */
white-space: normal; /* 確保不會一整段卡住 */
line-height: 1.6;
}

在 Hero 區下方添加宣言區

正確的結構應該是:

<header className="hero hero--primary">
<!-- Hero 區(大標 + 小標) -->
</header>

<section className="heroDeclaration">
<!-- 宣言區(短句/呼籲語) -->
</section>

<main>
<!-- 主要內容區(功能介紹、最新消息、產品亮點等等) -->
</main>

CSS 樣式:

.heroDeclaration {
padding: 4rem 0;
background-color: var(--ifm-background-color);
text-align: center;
}

.heroDeclarationInner {
max-width: 800px;
margin: 0 auto;
}

.heroDeclarationText {
text-align: left;
font-size: 1.5rem;
font-weight: 400;
line-height: 1.8;
margin: 0;
white-space: normal;
word-break: break-word;
}

Google 字體引入

在 Docusaurus 中引入 Google 字體

  1. 在 docusaurus.config.js 中添加 stylesheets

    module.exports = {
    // 其他設定...
    stylesheets: [
    {
    href: 'https://fonts.googleapis.com/css2?family=Anton&display=swap',
    type: 'text/css',
    },
    ],
    };
  2. 在 CSS 中使用字體

    .heroTitle {
    font-family: 'Anton', sans-serif;
    }

字體備援設定

如果使用的字體不支持中文,可以設定備援字體:

.heroTitle {
font-family: 'Anton', 'Noto Sans TC', sans-serif;
}

這樣遇到中文字時,會自動套用 Noto Sans TC,整體更一致。

頁腳設計與社交媒體圖標

Docusaurus 頁腳配置

Docusaurus 的 Footer 配置在 docusaurus.config.js 中,有兩種類型:

  1. 簡單型(simple)
  2. 多欄型(multi-column)

不能混合使用這兩種類型。正確的配置方式:

footer: {
style: 'dark',
links: [
{
title: '分享',
items: [
{
html: `
<div class="footer-social-icons">
<a href="https://social-plugins.line.me/lineit/share?url=https://你的網址" target="_blank" rel="noopener noreferrer">
<img src="https://cdn.simpleicons.org/line/00C300" alt="Share on LINE" />
</a>
<!-- 其他社交媒體圖標 -->
</div>
`,
},
],
},
],
copyright: `Copyright © ${new Date().getFullYear()} My Project, Inc. Built with Docusaurus.`,
},

社交媒體圖標樣式

為社交媒體圖標創建獨立的圓形背景:

.footer-social-icons {
display: flex;
gap: 1rem;
justify-content: center;
align-items: center;
flex-wrap: wrap;
}

.footer-social-icons a {
width: 50px;
height: 50px;
background-color: white; /* 小圓形底色 */
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0 2px 5px rgba(0,0,0,0.1); /* 小陰影讓更立體 */
transition: transform 0.2s ease;
}

.footer-social-icons a:hover {
transform: scale(1.1); /* 滑鼠移過去稍微放大 */
}

.footer-social-icons img {
width: 24px;
height: 24px;
}

/* 暗色模式適配 */
[data-theme='dark'] .footer-social-icons a {
background-color: #333333;
}

/* 暗色模式下圖標變白色 */
[data-theme='dark'] .footer-social-icons a img {
filter: brightness(0%) invert(1);
opacity: 0.9; /* 微微降低亮度,看起來更舒服 */
}

SEO 優化策略

網站標題與描述的最佳實踐

在 Docusaurus 中,有幾個關鍵的 SEO 設定:

  1. config.js 中的 title 和 tagline

    const config = {
    title: 'COVIA 知識共享平台',
    tagline: '探索知識、實踐應用、推動開源的成長平台。',
    favicon: 'img/favicon.ico',
    }
  2. 頁面中的 Layout title 和 description

    <Layout
    title="探索AI與網站建置的第一站"
    description="從AI、編程到網站建置與開源實作,讓每個挑戰成為你的實力。"
    >

標題設計原則

  1. 避免關鍵字堆砌

    • 不好的例子:COVIA|AI|編程|網站建置|邏輯理論|落地應用|部署實作|開源分享
    • 好的例子:COVIA|探索AI、編程與網站建置的知識共享平台
  2. 標題長度控制

    • 控制在 50-60 字元以內,避免 Google 截斷顯示
  3. 自然語意優先

    • 讓標題讀起來像一個自然的句子,而不是關鍵字列表

Layout title 與 config title 的關係

在 Docusaurus 中,最終的 <title> 標籤會自動組合成:Layout Title | Site Title

  • Layout title:頁面的個別標題,SEO 影響最大
  • config.js 中的 title:網站整體名稱,輔助作用

最佳實踐是:

  • Layout title 寫每個頁面的個別主題
  • Site title (config.js) 寫整個網站品牌名
  • tagline 不會直接影響 SEO,主要用於頁面顯示

Open Graph 與社交媒體分享

Open Graph 標籤設置

Open Graph 標籤用於控制網站在社交媒體上分享時的預覽效果:

<!-- Open Graph Meta Tags (for Facebook, LINE, Discord, Telegram, Threads) -->
<meta property="og:type" content="website" />
<meta property="og:title" content="COVIA|探索AI、編程與網站建置的知識共享平台" />
<meta property="og:description" content="從AI、編程到網站建置與開源實作,讓每個挑戰成為你的實力。" />
<meta property="og:url" content="https://covia.com/" />
<meta property="og:image" content="https://covia.com/img/og-image.png" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<meta property="og:site_name" content="COVIA" />

<!-- Twitter Card Meta Tags (for X) -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="COVIA|探索AI、編程與網站建置的知識共享平台" />
<meta name="twitter:description" content="從AI、編程到網站建置與開源實作,讓每個挑戰成為你的實力。" />
<meta name="twitter:image" content="https://covia.com/img/og-image.png" />
<meta name="twitter:url" content="https://covia.com/" />

在 Docusaurus 中添加 Open Graph 標籤

有兩種方法可以在 Docusaurus 中添加 Open Graph 標籤:

  1. 全站統一設定(在 docusaurus.config.js 中):

    themeConfig: {
    // ...其他設定
    metadata: [
    { name: 'description', content: '從AI、編程到網站建置與開源實作,讓每個挑戰成為你的實力。' },
    { property: 'og:type', content: 'website' },
    { property: 'og:title', content: 'COVIA|探索AI、編程與網站建置的知識共享平台' },
    // ...其他 meta 標籤
    ],
    },
  2. 單頁個別設定(在頁面組件中):

    import Head from '@docusaurus/Head';

    export default function Home() {
    const { siteConfig } = useDocusaurusContext();
    return (
    <Layout
    title="COVIA|探索AI、編程與網站建置的知識共享平台"
    description="從AI、編程到網站建置與開源實作,讓每個挑戰成為你的實力。"
    >
    <Head>
    <meta property="og:type" content="website" />
    <meta property="og:title" content="COVIA|探索AI、編程與網站建置的知識共享平台" />
    {/* ...其他 meta 標籤 */}
    </Head>
    <HomepageHeader />
    <main>...</main>
    </Layout>
    );
    }

分享圖片最佳實踐

  • 建議尺寸:1200 × 630 px(FB、LINE官方推薦的比例)
  • 圖檔大小:小於 300KB 最佳,載入快
  • 圖片內容:簡潔+品牌名+一個短slogan(不要寫太多文字)
  • 設計建議:LOGO + 「COVIA|知識共享平台」+簡單背景

語意搜索趨勢

現代搜索引擎已經從「關鍵字比對」轉向「語意理解」:

  • 過去:關鍵字匹配(keyword matching)、「有這個字」就給分
  • 現在/未來:語意理解(semantic matching)、「這段話意圖是什麼」才給分

最佳實踐:

  • 聚焦在主題明確、敘述自然、語意清晰的內容建置
  • 往「語意匹配、解決使用者意圖」的方向優化
  • 不需要過度依賴 TAG 和關鍵字堆砌